package com.yvon.maple.service.system.service;

import com.yvon.boot.mybatis.IBaseService;
import com.yvon.maple.cloud.api.system.dto.SecurityUserDTO;
import com.yvon.maple.service.system.entity.User;
import com.yvon.maple.service.system.vo.ResetPasswordVO;
import com.yvon.maple.service.system.vo.UpdatePasswordVO;

import java.util.List;
import java.util.Set;

/**
 * @author : Yvon
 * @version : 1.0
 * @since : 2021/3/15
 */
public interface UserService extends IBaseService<User> {


    /**
     * 保存
     *
     * @param entity  实体
     * @param roleIds 角色ID
     * @return boolean
     * @author : Yvon / 2022-05-26
     */
    boolean save(User entity, List<Long> roleIds);


    /**
     * 更新
     *
     * @param entity  实体
     * @param roleIds 角色ID集合
     * @return boolean
     * @author : Yvon / 2022-05-26
     */
    boolean update(User entity, List<Long> roleIds);

    /**
     * 通过用户名查询
     *
     * @param username 用户名
     * @return User
     * @author : Yvon / 2021-09-24
     */
    User getByUsername(String username);


    /**
     * 通过用户名查询
     *
     * @param username 用户名
     * @return User
     * @author : Yvon / 2021-09-24
     */
    User getLdapByUsername(String username);


    /**
     * 通过用户名
     *
     * @param username 用户名
     * @return SecurityUserDTO
     * @author : Yvon / 2022-05-26
     */
    SecurityUserDTO loadByUsername(String username);

    /**
     * 通过手机号查询用户
     *
     * @param mobile 手机号
     * @return User
     * @author : Yvon / 2021-09-24
     */
    User getByMobile(String mobile);

    /**
     * 更新密码
     *
     * @param vo 参数
     * @return boolean
     * @author : Yvon / 2022-05-26
     */
    boolean updatePassword(UpdatePasswordVO vo);


    /**
     * 重置密码
     *
     * @param vo 参数
     * @return boolean
     */
    boolean resetPassword(ResetPasswordVO vo);

    /**
     * 通过电子邮件查询用户
     *
     * @param email 电子邮件
     * @return User
     * @author : Yvon / 2022-01-27
     */
    User getByEmail(String email);

    /**
     * 通过用户ID查询电子邮件
     *
     * @return Set<String>
     * @author : Yvon / 2022-05-20
     */
    Set<Long> getUserIdsByRoleIds(Set<Long> roleIds);

    /**
     * 通过用户ID查询手机号
     *
     * @param userIds 用户ID集合
     * @return Set<String>
     * @author : Yvon / 2022-05-26
     */
    Set<String> getMobileByUserIds(Set<Long> userIds);

    /**
     * 通过用户名查询手机号
     *
     * @return Set<String>
     * @author : Yvon / 2022-05-20
     */
    Set<String> getEmailByUserIds(Set<Long> userIds);

    /**
     * 通过用户ID查询电子邮件
     *
     * @return Set<String>
     * @author : Yvon / 2022-05-20
     */
    Set<String> getEmailByRoleIds(Set<Long> roleIds);

    /**
     * 通过用户ID查询手机号
     *
     * @return Set<String>
     * @author : Yvon / 2022-05-20
     */
    Set<String> getMobileByRoleIds(Set<Long> roleIds);
}
